Traditionally, parallel processing refers to the concept of speeding-up the execution of a program by dividing the program into multiple fragments that can execute concurrently, each on its own processor. A program being executed across n processors might execute n times faster than it would using a single processor. The terms concurrently and parallel are used to refer to the situation where the period for executing two or more processes overlap in time, even if they start and stop at different times. Most computers have just one processor, but some models have several. With single or multiple processor computers, it is possible to perform parallel processing by connecting multiple computers in a network and distributing portions of the program to different computers on the network.
In practice, however, it is often difficult to divide a program in such a way that separate processors can execute different portions of a program without interfering with each other. One idea to facilitate the use of parallel processing is for the developer to use a graph that defines how the various portions of a job will be executed in parallel by an execution engine. The graph can then be used by the execution engine to manage the parallel processing. However, many developers are not trained on how to create a graph for an execution engine, and programming a graph can be challenging.